/**
 *  @file
 *  @brief   梁单元数据定义
 *  @author  wanghuan
 *  @date    2024.05.06
 *  @version  v1.0
 *  @par Copyright(c):  ShenGong  Simulation corporation
 */

#pragma once
#include "DataStructure/Common/DataStructureNamespace.h"
#include "DataStructure/Common/Integer.h"

SG_DATASTRUCTURE_FEM_NAMESPACE_OPEN
/** \enum ElementTypes
 * 单元类型枚举
 */
/** \enum ElementTypes
 * 单元类型枚举
 */
enum ElementTypes
{
    ELETYPE_Unknown       = -1,  ///< 未知
    ELETYPE_ScalarSpring  = 0,   ///< 标量弹簧单元
    ELETYPE_ScalarSpring2 = 1,   ///< 标量弹簧单元，不使用属性定义
    ELETYPE_ScalarMass    = 2,   ///< 标量质量单元
    ELETYPE_Bush          = 3,   ///< 标量质量单元
    ELETYPE_Conm1         = 4,   ///< 对称型质量单元
    ELETYPE_Conm2         = 5,   ///< 通用质量单元
    ELETYPE_Link          = 6,   ///< 拉压杆
    ELETYPE_LinkNoRef     = 9,   ///< 拉压杆，无截面属性定义
    ELETYPE_Tube          = 12,  ///< 圆形杆单元
    /// 预留 4个编号，未来标量单元和阻尼单元可能增加
    ELETYPE_Bar  = 17,  ///< 简单梁单元
    ELETYPE_Beam = 18,  ///< 任意形状梁单元

    // save for beam3 Taper and bend
    ELETYPE_PlaneTri3  = 22,  ///< 3节点三角形平面应力单元
    ELETYPE_PlaneTri6  = 23,  ///< 6节点三角形平面应力单元
    ELETYPE_PlaneQuad4 = 24,  ///< 4节点四边形平面应力单元
    ELETYPE_PlaneQuad8 = 25,  ///< 8节点四边形平面应力单元
    // save for plane strain and axial symmetry element

    ELETYPE_Shear    = 33,  ///< 剪切单元
    ELETYPE_MemTria3 = 34,  ///< 3节点小量膜单元
    // save for other type of membrane element
    ELETYPE_Allman3  = 36,  ///< 3节点Allman型膜单元
    ELETYPE_MemQuad4 = 37,  ///< 四边形小量膜单元
    // save for other type of membrane element
    ELETYPE_Allman4     = 39,  ///< 四边形Allman型膜单元
    ELETYPE_ThinPlate3  = 40,  ///< 三角形薄板单元（采用离散 Kirchhoff 理论）
    ELETYPE_ThinPlate4  = 41,  ///< 四边形薄板单元（采用离散 Kirchhoff 理论）
    ELETYPE_ThickPlate3 = 42,  ///< 三角形中厚板单元（采用Mindlin理论）
    ELETYPE_ThickPlate4 = 43,  ///< 四边形中厚板单元（采用Mindlin理论）
    // save two numbers for nastran plate element
    // 以下壳单元构成组合单元
    ELETYPE_ShellTria3 = 44,  ///< 三角形组合壳单元（使用 ELETYPE_MemTria3膜）
    ELETYPE_ShellQuad4 = 45,  ///< 四边形组合壳单元（使用 ELETYPE_MemQuad4膜）
    // 预留四个编号为了未来对标ANSYS shell63 和 shell181
    ELETYPE_ShellTria3R = 48,  ///< 三角形组合壳单元（使用 ELETYPE_Allman3膜）
    ELETYPE_ShellQUAD4R = 49,  ///< 四边形组合壳单元（使用 ELETYPE_Allman4膜）
    ELETYPE_Composite3  = 50,  ///< 复合材料三角形壳单元
    ELETYPE_Composite4  = 51,  ///< 复合材料四边形壳单元
    ELETYPE_ShellTria6  = 52,  ///< 高阶三角形组合壳单元
    ELETYPE_ShellQuad8  = 53,  ///< 高阶四边形组合壳单元
    /// 预留到60编号，方便未来扩充单元类型
    ELETYPE_Hexa8SRI = 61,  ///< 8节点六面体非协调选择减缩积分单元
    // ELETYPE_Hexa8SR
    // ELETYPE_Hexa8
    // ELETYPE_Hexa8FullSR = 64, ///<
    // ELETYPE_Hexa8Full
    // ELETYPE_Hexa20SR
    ELETYPE_Hexa20 = 67,  ///< 20节点六面体单元
    // ELETYPE_Hexa20FullSR
    // ELETYPE_Hexa20Full
    ELETYPE_Tetra4 = 70,  ///< 4节点四面体单元
    // ELETYPE_Tetra4Full = 71,   ///<
    ELETYPE_Tetra10   = 72,  ///< 10节点四面体单元
    ELETYPE_Penta6SRI = 73,  ///< 6节点三棱柱单元
    // ELETYPE_Penta6SR = ,    ///<
    // ELETYPE_Penta6 = ,      ///<
    // ELETYPE_Penta6FullSR = , ///<
    // ELETYPE_Penta6Full = ,  ///<
    ELETYPE_Penta15SR = 78,  ///< 15节点高阶三棱柱单元
    // ELETYPE_Penta15 = ,     ///<
    // ELETYPE_Penta15FullSR = , ///<
    // ELETYPE_Penta15Full = , ///<
    ELETYPE_Pyram5R = 82,         ///< 5节点金字塔单元
                                  // ELETYPE_Pyram5 = , ///<
                                  // ELETYPE_Pyram15 = , ///<
    ELETYPE_Pyram13 = 85,         ///< 13节点高阶金字塔单元
    ELETYPE_Weld,                 ///<
    ELETYPE_FAST,                ///<
    ELETYPE_CHBDYP,               ///< PHBDY 词条参考的边界条件表面单元
    ELETYPE_CHBDYG,               ///<
    ELETYPE_CDAMP1 = 100,         ///<
    ELETYPE_CDAMP2,               ///<
    ELETYPE_CDAMP3,               ///<
    ELETYPE_CDAMP4,               ///<
    ELETYPE_ScalarSpring3 = 105,  ///< 标量弹簧单元
    ELETYPE_ScalarSpring4,        ///< 标量弹簧单元
    ELETYPE_MASS1 = 110,          ///<
    ELETYPE_MASS2 = 111,          ///<
    ELETYPE_MASS3,                ///<
    ELETYPE_MASS4,                ///<
    ELETYPE_VISC,                 ///<
};

SG_DATASTRUCTURE_FEM_NAMESPACE_CLOSE